@CLASS
pfCacheTests

@USE
pf/tests/pfTestCase.p
pf/cache/pfCache.p
pf/io/pfOS.p

@BASE
pfTestCase

@create[aTestName]
  ^BASE:create[$aTestName]

@setUp[]
  $CACHE[^pfCache::create[$.cacheDir[/temp/cache/]]]

@tearDown[]
  ^pfOS:rm[/temp/cache/]

@codeTest[][dict;t;it]
  ^pfAssert:isTrue("^CACHE.code[t1.cache](10){15}" eq "15")[Не выполняется код.]
  ^pfAssert:isTrue("^CACHE.code[t1.cache](10){25}" eq "15")[Не загружается кэш]

@dataStringTest[]
  $result[^CACHE.data[t2.cache](10)[string]{иван}]
  ^pfAssert:isTrue($result eq "иван")[1: "$result"]

  $result[^CACHE.data[t2.cache](10)[string]{петр}]
  ^pfAssert:isTrue($result eq "иван")[2: "$result"]

  $result[^CACHE.data[t2.cache](0)[string]{костя}]
  ^pfAssert:isTrue($result eq "костя")[3: "$result"]
  
@dataHashTest[]
  $result[^CACHE.data[t3.cache](10)[hash]{^hash::create[$.one[один] $.two[два]]}]
  ^pfAssert:isTrue($result.one eq "один")[1: "$result.one"]

  $result[^CACHE.data[t3.cache](10)[hash]{$.one[два] $.two[один]}]
  ^pfAssert:isTrue($result.one eq "один")[2: "$result.one"]

  $result[^CACHE.data[t3.cache](0)[hash]{$.one[три] $.two[один]}]
  ^pfAssert:isTrue($result.one eq "три")[3: "$result.one"]
  
@dataDateTest[]
  $result[^CACHE.data[t4.cache](10)[date]{^date::create[2007-11-01 13:47]}]
  ^pfAssert:isTrue(^result.sql-string[] eq "2007-11-01 13:47:00")[1: "^result.sql-string[]"]

  $result[^CACHE.data[t4.cache](10)[date]{^date::create[2006-11-01 13:47]}]
  ^pfAssert:isTrue(^result.sql-string[] eq "2007-11-01 13:47:00")[2: "^result.sql-string[]"]

  $result[^CACHE.data[t4.cache](0)[date]{^date::create[2005-11-01 13:47]}]
  ^pfAssert:isTrue(^result.sql-string[] eq "2005-11-01 13:47:00")[3: "^result.sql-string[]"]

@dataBoolTest[][val]
  $result[^CACHE.data[t5.cache](10)[bool]{$val(true)$val}]
  ^pfAssert:isTrue($result)[1: false]

  $result[^CACHE.data[t5.cache](10)[bool]{$val(false)$val}]
  ^pfAssert:isTrue($result)[2: false]

  $result[^CACHE.data[t5.cache](0)[bool]{$val(false)$val}]
  ^pfAssert:isTrue(!$result)[3: true]

@dataXdocTest[][xDoc;xNode]
  $xDoc1[^xdoc::create{<?xml version="1.0" encoding="$request:charset"?><root><item id="1"/><item id="2"><a a="1"/><b bb="2" /><c ccc="3"/></item></root>}]
  $xDoc2[^xdoc::create{<?xml version="1.0" encoding="$request:charset"?><root><item id="10"/><item id="2"><a a="1"/><b bb="2" /><c ccc="3"/></item></root>}]
  $xNode[^xDoc1.selectSingle[/root/item[@id="2"]]]

  $result[^CACHE.data[t6.cache](10)[xdoc]{$xDoc1}]
  ^pfAssert:isTrue(^result.string[] eq ^xDoc1.string[])[1: false]

  $result[^CACHE.data[t6.cache](10)[xdoc]{$xDoc2}]
  ^pfAssert:isTrue(^result.string[] eq ^xDoc1.string[])[2: false]


@dataXnodeTest[]
  ^pfAssert:pass[]

@dataFileTest[]
  ^pfAssert:pass[]
  